package network

import (
	"fmt"
	"net"
)

func UDPListen(msgHandler func(conn *net.UDPConn, addr *net.UDPAddr, msg string)) {
	// 创建 UDP 监听器
	addr, err := net.ResolveUDPAddr("udp", ":15533")
	if err != nil {
		panic(err)
	}
	conn, err := net.ListenUDP("udp", addr)
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	fmt.Fprintf(conn, "Hello, server!")
	if err != nil {
		panic(err)
	}
	defer conn.Close()
	// 读取客户端发送的数据
	for {
		buf := make([]byte, 1024)
		n, addr, err := conn.ReadFromUDP(buf)
		if err != nil {
			fmt.Println("read error:", err)
			continue
		}
		msgHandler(conn, addr, string(buf[:n]))
	}
}

func UDPSend(target *net.UDPAddr, msg string) {
	conn, err := net.DialUDP("udp", nil, target)
	if err != nil {
		panic(err)
	}
	defer conn.Close()
	fmt.Fprintf(conn, msg)
}

func UDPSendByStrAddr(target string, msg string) {
	addr, err := net.ResolveUDPAddr("udp", target)
	if err != nil {
		panic(err)
	}
	UDPSend(addr, msg)
}
